
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
// 
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

/**
 * AUTO-GENERATED FILE. DO NOT MODIFY.
 */

// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
// 
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
import * as zrUtil from 'zrender/lib/core/util.js';
export default function radarLayout(ecModel) {
	ecModel.eachSeriesByType('radar', function (seriesModel) {
		var data = seriesModel.getData();
		var points = [];
		var coordSys = seriesModel.coordinateSystem;

		if (!coordSys) {
			return;
		}

		var axes = coordSys.getIndicatorAxes();
		zrUtil.each(axes, function (axis, axisIndex) {
			data.each(data.mapDimension(axes[axisIndex].dim), function (val, dataIndex) {
				points[dataIndex] = points[dataIndex] || [];
				var point = coordSys.dataToPoint(val, axisIndex);
				points[dataIndex][axisIndex] = isValidPoint(point) ? point : getValueMissingPoint(coordSys);
			});
		}); // Close polygon

		data.each(function (idx) {
			// TODO
			// Is it appropriate to connect to the next data when some data is missing?
			// Or, should trade it like `connectNull` in line chart?
			var firstPoint = zrUtil.find(points[idx], function (point) {
				return isValidPoint(point);
			}) || getValueMissingPoint(coordSys); // Copy the first actual point to the end of the array

			points[idx].push(firstPoint.slice());
			data.setItemLayout(idx, points[idx]);
		});
	});
}

function isValidPoint(point) {
	return !isNaN(point[0]) && !isNaN(point[1]);
}

function getValueMissingPoint(coordSys) {
	// It is error-prone to input [NaN, NaN] into polygon, polygon.
	// (probably cause problem when refreshing or animating)
	return [coordSys.cx, coordSys.cy];
}